﻿package org.utils
{
	import flash.display.Sprite;
	/**
	 * 对象处理类，用于控制对象内部子对象加载，卸载，显示及隐藏 
	 * @author Administrator
	 * 
	 */    
	public class ElementControl 
	{
		
		public function ElementControl():void {}
		
		/**
		 * 删除指定类型对象实例集合 
		 * @param type 类对象
		 * @param container 操作对象实例
		 * 
		 */		
		public static function cleanObjByType(type:Class, container:*):void {
			if (container == null) { return; }
			for (var j:Number = 0; j < container.numChildren;j++ ) {
				 var item:*= container.getChildAt(j)
				 if (item is type==true)
				 {   
					container.removeChild(item)
					j--
				 }
			} 	 
		}
			
		/**
		 * 删除指定对象 
		 * @param obj 要删除的对象实例
		 * @return 
		 * 
		 */		
		public static function cleanObj(obj:*):void {
			if (obj == null) { return; }
			if (obj.parent == null) { return; }
			obj.parent.removeChild(obj)
			}	
				
		/**
		 * 清空指定对象
		 * @param container 操作对象实例
		 * @return 
		 * 
		 */		
		public static function cleanAll(container:Sprite):void {
			if (container == null) { return; }
			for (var j:Number = 0; j < container.numChildren;j++ ) {
				 var item:*=container.getChildAt(j)
				 container.removeChild(item)
				 j--
				}
			}	

		/**
		 * 获取指定类型对象实例集合 
		 * @param type 类对象
		 * @param container 操作对象实例
		 * @return Array
		 * 
		 */		
		public static function getObjs(type:Class, container:Sprite):Array {
			if (container == null) { return []; }
			var ObjBox:Array = []
			for (var j:Number = 0; j < container.numChildren;j++ ) {
				 var item:*= container.getChildAt(j)
				 if (item is type)
				 {   
					 ObjBox.push(item)
				 }
				}
			return ObjBox
			}
        
	   /**
	    * 删除除指定类型外的其他类型对象实例集合 
	    * @param type 类对象
	    * @param container 操作对象实例
	    * @return 
	    * 
	    */		
	   public static function cleanAllBesideType(type:Class, container:Sprite):void {
		   if (container == null) { return; }
			for (var j:Number = 0; j < container.numChildren;j++ ) {
				 var item:*= container.getChildAt(j)
				 if (!item is type) {
					 container.removeChild(item)
					 j--
					 }
				 }
			}	
			
	   /**
	    * 获取除指定类型外的其他类型集合 
	    * @param type 类对象
	    * @param container 操作对象实例
	    * @return Array
	    * 
	    */	   
	   public static function getAllBesideType(type:Class,container:Sprite):Array {
			if (container == null) { return []; }
			var ObjBox:Array = []
			for (var j:Number = 0; j < container.numChildren;j++ ) {
				 var item:*= container.getChildAt(j)
				 if (item is type==false)ObjBox.push(item)
				 }
            return ObjBox
            
			}

		/**
		 * 获取指定对象实例所有子对象实例集合	 
		 * @param container 操作对象实例
		 * @return Array
		 * 
		 */	   
		public static function getAllObjs(container:Sprite):Array {
			if (container == null) { return []; }
			var ObjBox:Array = []
			for (var j:Number = 0; j < container.numChildren;j++ ) {
				 var item:*= container.getChildAt(j)
				 ObjBox.push(item)
				 }
            return ObjBox
            
			}	

		/**
		 * 显示指定对象实例中所有子对象实例集合
		 * @param container 操作对象实例
		 * @return 
		 * 
		 */		
		public static function showAllObj(container:Sprite):void {
			if (container == null) { return; }
			for (var j:Number = 0; j < container.numChildren;j++ ) {
				 var item:*= container.getChildAt(j)
				 item.visible=true
				 }
			}
			
		/**
		 * 隐藏指定对象中所有子对象 
		 * @param container 操作对象实例
		 * @return 
		 * 
		 */		
		public static function hideAllObj(container:Sprite):void {
			if (container == null) { return; }
			for (var j:Number = 0; j < container.numChildren;j++ ) {
				 var item:*= container.getChildAt(j)
				 item.visible=false
				 }
			}

		/**
		 * 显示指定类型对象结合
		 * @param type 类对象
		 * @param container 操作对象实例
		 * @return 
		 * 
		 */		
		public static function showObjByType(type:Class, container:Sprite):void {
			if (container == null) { return; }
			for (var j:Number = 0; j < container.numChildren;j++ ) {
				 var item:*= container.getChildAt(j)
				 if (item is type)item.visible=true
				 }
			}
			
		/**
		 * 隐藏指定类型对象结合	 
		 * @param type 类对象
		 * @param container 操作对象实例
		 * @return 
		 * 
		 */		
        public static function hideObjByType(type:Class, container:Sprite):void {
			if (container == null) { return; }
			for (var j:Number = 0; j < container.numChildren;j++ ) {
				 var item:*= container.getChildAt(j)
				 if (item is type)item.visible=false
				 }
			}

		/**
		 * 隐藏除指定类型外的其他类型结合	 
		 * @param type 类对象
		 * @param container 操作对象实例
		 * @return 
		 * 
		 */		
        public static function hideObjBesideType(type:Class, container:Sprite):void {
			if (container == null) { return; }
			for (var j:Number = 0; j < container.numChildren;j++ ) {
				 var item:*= container.getChildAt(j)
				 if (!item is type)item.visible=false
				 }
			}

		/**
		 * 显示除指定类型外的其他类型结合		
		 * @param type 类对象
		 * @param container 操作对象实例
		 * @return 
		 * 
		 */		
		public static function showObjBesideType(type:Class, container:Sprite):void {
			if (container == null) { return; }
			for (var j:Number = 0; j < container.numChildren;j++ ) {
				 var item:*= container.getChildAt(j)
				 if (!item is type)item.visible=true
				 }
			}	
			
	}
	
}